DROP VIEW IF EXISTS rozklad;
DROP VIEW IF EXISTS grany_film;
DROP VIEW IF EXISTS seans_film;
DROP VIEW IF EXISTS bliski_seans;
DROP VIEW IF EXISTS miejsca;
DROP VIEW IF EXISTS seans_bilet;
DROP VIEW IF EXISTS rezerwacja;
DROP VIEW IF EXISTS ranga_limit;
BEGIN;
--PRAGMA foreign_keys = ON;
CREATE VIEW rozklad AS 
	SELECT b.id AS id_budynku, b.adres, b.kontakt, b.opis, sala.id AS id_sali, sala.opis as opis_sali, seans.rozpoczecie, f.id AS id_filmu, f.tytul, f.opis as opis_filmu, czas_trwania, seans.id as id_seansu FROM
		KinoRezerwacja_Budynek AS b 
		LEFT OUTER JOIN KinoRezerwacja_Sala AS sala ON (b.id = sala.id_budynku) 
		LEFT OUTER JOIN KinoRezerwacja_Seans AS seans ON (seans.id_sali = sala.id) 
		LEFT OUTER JOIN KinoRezerwacja_Film AS f ON (seans.id_filmu = f.id);

CREATE VIEW bliski_seans AS
	SELECT * FROM KinoRezerwacja_Seans AS s
		WHERE rozpoczecie - now() < interval '7 days'
			AND now() < rozpoczecie + interval '1 day';
CREATE VIEW grany_film AS
	SELECT id, tytul, rezyser, aktorzy, opis, czas_trwania, premiera, premiera_w_polsce 
	FROM KinoRezerwacja_Film AS f
	WHERE EXISTS (SELECT * FROM bliski_seans AS s
			WHERE f.id = s.id_filmu) ORDER BY tytul;

CREATE VIEW seans_film AS
	SELECT f.id AS id_filmu, tytul, rezyser, aktorzy, opis, czas_trwania, premiera, premiera_w_polsce, s.id AS id_seansu, id_sali, rozpoczecie  
	FROM KinoRezerwacja_Film AS f 
		LEFT OUTER JOIN bliski_seans AS s
			ON (f.id = s.id_filmu)	
		ORDER BY tytul, rozpoczecie;

CREATE VIEW miejsca AS
	SELECT seans.id as id_seansu, inst.id as id_instancji_miejsca, m.miejsce, m.rzad, inst.stan, r.id_klienta as id_klienta, r.id as id_rezerwacji
	FROM
		KinoRezerwacja_seans as seans 
		JOIN KinoRezerwacja_instancja_miejsca as inst ON (seans.id = inst.id_seansu)
		JOIN KinoRezerwacja_miejsce as m ON (inst.id_miejsca = m.id)
		LEFT OUTER JOIN KinoRezerwacja_Rezerwacja as r ON (r.id_instancji_miejsca = inst.id)
	ORDER BY rzad, miejsce;
CREATE VIEW seans_bilet AS
	SELECT s.id AS id_seansu, b.id AS id_typu_biletu, b.opis, b.cena 
	FROM KinoRezerwacja_seans AS s
	JOIN KinoRezerwacja_Mozliwy_bilet AS mb ON (s.id = mb.id_seansu)
	JOIN KinoRezerwacja_Typ_biletu as b ON (b.id = mb.id_typu);

CREATE VIEW rezerwacja AS
        SELECT r.kiedy, r.id, r.id_klienta, tb.opis AS opis_biletu, tb.cena, podaj_najlepsza_cena(r.id) AS cena_promocyjna, s.rozpoczecie, f.tytul, sala.opis AS opis_sali, miejsce.miejsce, miejsce.rzad, im.stan, f.id AS id_filmu, s.id AS id_seansu, im.id AS id_instancji_miejsca
        FROM kinorezerwacja_rezerwacja AS r 
        JOIN kinorezerwacja_typ_biletu AS tb 
            ON r.id_typu_biletu = tb.id 
        JOIN kinorezerwacja_instancja_miejsca AS im
            ON im.id = r.id_instancji_miejsca
        JOIN kinorezerwacja_seans AS s
            ON im.id_seansu = s.id
        JOIN kinorezerwacja_film AS f
            ON s.id_filmu = f.id
		JOIN kinorezerwacja_miejsce AS miejsce
			ON im.id_miejsca = miejsce.id
		JOIN kinorezerwacja_sala AS sala
			ON miejsce.id_sali = sala.id
        ORDER BY r.kiedy;

CREATE VIEW ranga_limit AS
	SELECT r.id, skrot, opis, "limit" as limit_rezerwacji, l.id as "id_limitu" 
		FROM KinoRezerwacja_ranga AS r LEFT OUTER JOIN KinoRezerwacja_limit_rezerwacji AS l ON (r.id = l.id_rangi);

COMMIT;


